import request from './request'

/**
 * 学生相关接口
 */
export const studentApi = {
  /**
   * 获取所有学生（分页）
   * @param {Object} params 分页参数 {page, size}
   */
  getAllStudents(params = {}) {
    return request({
      url: '/api/students',
      method: 'get',
      params
    }).then(response => {
      return response;
    }).catch(error => {
      console.error('获取所有学生失败:', error);
      throw error;
    });
  },

  /**
   * 获取所有学生（列表形式，用于下拉选择等场景）
   */
  getAllStudentsList() {
    return request({
      url: '/api/students/list',
      method: 'get'
    }).then(response => {
      return response;
    }).catch(error => {
      console.error('获取学生列表失败:', error);
      throw error;
    });
  },

  /**
   * 根据ID获取学生
   * @param {number} id 学生ID
   */
  getStudentById(id) {
    return request({
      url: `/api/students/${id}`,
      method: 'get'
    }).then(response => {
      return response;
    }).catch(error => {
      console.error(`获取学生ID=${id}失败:`, error);
      throw error;
    });
  },

  /**
   * 获取教学任务的所有学生
   * @param {number} teachingMissionId 教学任务ID
   */
  getStudentsByTeachingMission(teachingMissionId) {
    return request({
      url: `/api/students/by-teaching-mission/${teachingMissionId}`,
      method: 'get'
    });
  },

  /**
   * 创建学生
   * @param {Object} student 学生信息
   * @param {string} student.studentId - 学号
   * @param {string} student.name - 姓名
   * @param {number} student.classId - 队次ID
   * @param {number} student.majorId - 专业ID
   * @param {number} student.cengCiId - 培养层次ID
   * @param {number} student.statusId - 状态ID
   * @param {boolean} student.isRepeater - 是否留级
   */
  createStudent(student) {
    return request({
      url: '/api/students',
      method: 'post',
      data: student
    }).then(response => {
      return response;
    }).catch(error => {
      throw error;
    });
  },

  /**
   * 更新学生
   * @param {number} id 学生ID
   * @param {Object} student 学生信息
   * @param {string} student.studentId - 学号
   * @param {string} student.name - 姓名
   * @param {number} student.classId - 队次ID
   * @param {number} student.majorId - 专业ID
   * @param {number} student.cengCiId - 培养层次ID
   * @param {number} student.statusId - 状态ID
   * @param {boolean} student.isRepeater - 是否留级
   */
  updateStudent(id, student) {
    return request({
      url: `/api/students/${id}`,
      method: 'put',
      data: student
    }).then(response => {
      return response;
    }).catch(error => {
      throw error;
    });
  },

  /**
   * 删除学生
   * @param {number} id 学生ID
   */
  deleteStudent(id) {
    return request({
      url: `/api/students/${id}`,
      method: 'delete'
    })
  },

  /**
   * 修改学生状态
   * @param {number} id 学生ID
   * @param {Object} statusData 状态数据
   * @param {number} statusData.statusId - 新状态ID
   */
  updateStudentStatus(id, statusData) {
    return request({
      url: `/api/students/${id}/status`,
      method: 'put',
      data: statusData
    }).then(response => {
      return response;
    }).catch(error => {
      throw error;
    });
  },

  /**
   * 批量导入学生
   * @param {FormData} formData 包含Excel文件的表单数据
   */
  importStudents(formData) {
    return request({
      url: '/api/students/import',
      method: 'post',
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  /**
   * 下载学生导入模板
   */
  downloadTemplate() {
    // 使用public目录下的模板
    window.open('/templates/student_import_template.xlsx', '_blank')
  },

  /**
   * 获取学生状态列表
   */
  getStudentStatuses() {
    return request({
      url: '/api/student-statuses',
      method: 'get'
    })
  },

  /**
   * 根据班级ID获取学生列表
   * @param {number} classId 班级ID
   */
  getStudentsByClass(classId) {
    return request({
      url: `/api/students/by-class/${classId}`,
      method: 'get'
    })
  },

  /**
   * 根据教学任务ID获取学生列表
   * @param {number} teachingMissionId 教学任务ID
   */
  getStudentsByTeachingMission(teachingMissionId) {
    return request({
      url: `/api/students/by-teaching-mission/${teachingMissionId}`,
      method: 'get'
    })
  },

  /**
   * 根据专业层次ID获取学生列表
   * @param {number} cengciId 专业层次ID
   */
  getStudentsByCengCi(cengciId) {
    return request({
      url: `/api/students/by-cengci/${cengciId}`,
      method: 'get'
    }).then(response => {
      return response;
    }).catch(error => {
      throw error;
    });
  },

  /**
   * 根据多个条件过滤学生
   * @param {Object} filters 过滤条件
   * @param {number} filters.classId - 班级ID
   * @param {number} filters.majorId - 专业ID
   * @param {number} filters.cengciId - 专业层次ID
   * @param {number} filters.statusId - 状态ID
   * @param {string} filters.name - 姓名
   * @param {string} filters.studentId - 学号
   */
  getStudentsByFilter(filters) {
    return request({
      url: '/api/students/filter',
      method: 'get',
      params: filters
    }).then(response => {
      return response;
    }).catch(error => {
      throw error;
    });
  },

  /**
   * 下载导入报告
   * @param {string} filePath 报告文件路径
   */
  downloadImportReport(filePath) {
    return request({
      url: '/api/students/import-report/download',
      method: 'get',
      params: { filePath },
      responseType: 'blob'
    }).then(response => {
      // 创建下载链接
      const url = window.URL.createObjectURL(new Blob([response.data]))
      const link = document.createElement('a')
      link.href = url
      
      // 从文件路径中提取文件名
      const fileName = filePath.split('/').pop() || 'student_import_report.xlsx'
      link.setAttribute('download', fileName)
      
      document.body.appendChild(link)
      link.click()
      link.remove()
      window.URL.revokeObjectURL(url)
    })
  },
}
